#ifndef __PROJECT_CONFIG_H
#define __PROJECT_CONFIG_H

// ========== main ==========

//#define QUEUE_LENGTH 8	 							// main 消息队列长度
//#define ITEM_SIZE sizeof(USART_Message_t)			// main 消息队列项大小

// ========== usart ==========

#define MAX_STR_LEN 128								// USART printf字符串最大长度
#define MAX_MSG_LEN 256								// ESP 	 payload长度（含HTTP报文），绕过printf输出

// ========== buzzer ==========

#define BUZZER_PORT GPIOB							// BUZZER 引脚定义
#define BUZZER_PIN GPIO_Pin_4

typedef enum{										// BUZZER 状态定义
	Buzzer_OFF = 1,
	Buzzer_ON = 0,
}Buzzer_state_t;

// ========== led ==========

#define SYS_LED_PORT GPIOB							// SYS_LED 引脚定义（系统状态）
#define SYS_BLLED_PIN GPIO_Pin_14
#define SYS_RLED_PIN GPIO_Pin_15

#define SNR_LED_PORT GPIOB							// SNR_LED 引脚定义（响应传感器）
#define SNR_LED_PIN GPIO_Pin_6

typedef enum{										// LED 状态定义
	LED_OFF = 0,
	LED_ON = 1,
}LED_state;

// ========== 代码用途 ==========
//	工具在位检测。
//	- 如果工具不在位，测速器值大约在2000以下，白灯亮起。
//	- 如果工具在位，测速器值大约在2000以上，白灯熄灭。
//	- 如果用户提示拿起工具，蜂鸣器响起。

// ========== 1期内容 ==========
// √ 1. ESP-01控制
//		【应该没什么大问题，等芯片到达以后测试就可以啦】
//		- 连接网络
//		- 结构体设置ESP-01状态，实现开启与关闭连接（“+++”透传使用USARTSendBuffer，通过FLAG切换状态，测试效果）
//		- 已经确认wifi`连接时，自动联网
// √ 2. 服务器实现与手机通信
//		【IP：47.111.20.8，root, ABC12345】
//		- 手机端获取正确的通信格式
//		- 服务器根据PacketID区分来源（STM32/手机/其他）
//		- 修改手机的通信报文
// √ 3. 服务器超时踢出功能
//		- 使用FreeRTOS的 xTaskCreate + vTaskDelay；
//		- 实现STM32的每分钟心跳包
// √ 4. 设备状态转发
//		- 定义LED/蜂鸣器控制结构体
//		- 实现LED/蜂鸣器设备状态报文
//		- 初始化LED/蜂鸣器GPIO
//		- 将硬件操作封装成函数
// √ 5. STM32硬件控制
//		【不知道行不行，等芯片到达以后测试】
//		- 增加OLED显示状态
//		- 优化显示状态的逻辑
// √ 6. 手机客户端接受信息
//		- 在服务器添加客户端管理列表
//		- 实现手机连接服务器	
// - 7. 修改消息格式，减少发送格式错误，避免粘包与半包
//		【未完全修改，修改了发送格式USART_SendString，未修改粘包与半包，发现收发消息逻辑都要改，太懒了，小项目还能凑活用】
//		- 中断发送与接收分开处理
//		- 将消息改为小火车：结构体+数据两次发送
// × 8. 增加蓝牙，传向ESP-01
//		【经过多次努力，USART3引脚还是没能收到任何内容，蓝牙能连上，然而根本不触发我的中断，我放弃了】

// ========== 2期内容 ==========
// √ 1. 增加服务器日志功能
//		- 普通日志文件
//		- 日志严重程度分类INFO，ERROR，向上兼容
// √ 2. 增加服务器配置文件功能
// √ 3. 增加ADC传感器
//		- 修改LED、蜂鸣器引脚，测试功能
//		- 扫描端口，以保存ADC设备状态
//		- ADC达到阈值，亮灯
//		- 增加STM32全局配置头文件

// ========== 3期内容 ==========
//   1. 将蓝牙、WIFI的账号密码记入STM32 flush中
//		- 看门狗复位
//		- 自动连接蓝牙
//		- （ESP分支-是否连接-是否有flag）自动连接WIFI，发送AT指令，询问联网状态
//		
// ========== 4期内容 ==========
//   1. 增加外存flush

// ========== 拓展内容 ==========
//   1. 增加用户通过网页端向STM32发送指令，控制设备
//	【设置按钮点击，随便乱输容易被黑掉】
//	- 服务器端发送代码
//	- 用户端发送代码
//	- 用户端设置按钮

// ========== 问题表述 ==========
//	 1. 查过资料
//	 2. 分享思路
//	 3. 对不对
// ========== 代码思路 ==========
//	 1. 先写框架
//	 2. 再写内容

#endif
